package com.sinosoft.ptas.control;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.sinosoft.framework.core.common.exception.BusinessException;
import com.sinosoft.framework.core.common.utils.StringUtil;
import com.sinosoft.framework.core.common.utils.ajax.ResponseData;
import com.sinosoft.ptas.control.dto.DefaultTargetData;
import com.sinosoft.ptas.control.dto.DefaultTargetDatas;
import com.sinosoft.ptas.control.dto.OrganizationData;
import com.sinosoft.ptas.entity.DefaultTargetEntity;
import com.sinosoft.ptas.entity.TargetOrgRefEntity;
import com.sinosoft.ptas.service.DefaultTargetService;
import com.sinosoft.ptas.system.commom.CommonConstant;
import com.sinosoft.ptas.system.commom.ExceptionConstant;

/**
 * 默认目标属性
 * @author zhangxiaolong
 * @time   2017年2月27日 下午6:01:11
 */
@Controller
@RequestMapping(value="defaultTarget")
public class DefaultTargetController {
	
	@Autowired
	DefaultTargetService defaultTargetService;
	
	/**
	 * 通过其他司的组织Id查询实施目标
	 * 通过orgId(其他司用户组织id)到目标属性与组织关系表中查出目标属性id,接着通过目标属性id查出对应的默认目标
	 * @param orgId 其他司组织id
	 * @return List<DefaultTargetEntity> 默认目标列表
	 */
	@RequestMapping(value="/retrieveDefaultTargetByOther.service",method=RequestMethod.POST)
	@ResponseBody
	public ResponseData retrieveDefaultTargetByOther(String orgId){
		if(StringUtil.isBlank(orgId)){
			return new ResponseData(false,ExceptionConstant.ID_NULL_CODE,ExceptionConstant.ID_NULL_MESSAGE,null);
		}
		List<DefaultTargetEntity> defaultTargetEntitys=defaultTargetService.retrieveDefaultTargetByOther(orgId);
		List<DefaultTargetDatas> defaultTargetDatas=toDefaultTargetDatas(defaultTargetEntitys);
		return new ResponseData(true,defaultTargetDatas);
	}
	
	/**
	 * 通过省级用户的组织Id查询实施目标
	 * 通过orgId(省级用户组织id)到目标与组织关系表中查出目标id,接着通过目标id查出对应的目标
	 * @param orgId 省级用户组织id
	 * @return List<DefaultTargetEntity> 默认目标列表
	 */
	@RequestMapping(value="/retrieveDefaultTargetByProOrgId.service",method=RequestMethod.POST)
	@ResponseBody
	public ResponseData retrieveDefaultTargetByProOrgId(String orgId){
		if(StringUtil.isBlank(orgId)){
			return new ResponseData(false,ExceptionConstant.ID_NULL_CODE,ExceptionConstant.ID_NULL_MESSAGE,null);
		}
		List<DefaultTargetEntity> defaultTargetEntitys=defaultTargetService.retrieveDefaultTargetByProOrgId(orgId);
		List<DefaultTargetDatas> defaultTargetDatas=toDefaultTargetDatas(defaultTargetEntitys);
		return new ResponseData(true,defaultTargetDatas);
	}
	
	/**
	  * 添加默认目标
	 * 参数为一个默认目标集合，里面有一个实施期目标和多个年度目标，他们可以根据targetType目标类型来区分
	 * 先添加实施目标，添加成功后在添加年度目标，年度目标中的pid需要自己通过实施目标中的id来添加，实施目标没有父节点，年度目标有父节点
	 * @param defaultTargetList
	 */
	@RequestMapping(value="/createListDefaultTarget.service",method=RequestMethod.POST)
	@ResponseBody
	public ResponseData createListDefaultTarget(List<DefaultTargetDatas> defaultTargetDatas){
		if(defaultTargetDatas==null){
			return new ResponseData(false,ExceptionConstant.DATA_NULL_CODE,ExceptionConstant.DATA_NULL_MESSAGE,null);
		}
		try{
		List<DefaultTargetEntity> defaultTargetList=new ArrayList<DefaultTargetEntity>();//创建一个实体类集合用于接收传输类集合
		defaultTargetList=toDefaultTargetEntity(defaultTargetDatas);//传输类转实体类集合
		
		defaultTargetService.createListDefaultTarget(defaultTargetList);
			return new ResponseData(true,defaultTargetDatas);
	}
	catch(BusinessException e){
		return new ResponseData(false,e.getErrorCode(),e.getMessage(),null);
	}
	}
	
	/**
	  * 添加默认目标(新)
	 * 参数为一个默认目标对象，里面有一个实施期目标的具体信息和多个年度目标名字(一个String集合)
	 * 默认约定：对象含有的主体是实施期目标，String集合里的是年度目标
	 * 先添加实施目标，添加成功后
	 * 从实施目标中获取相关信息对年度目标进行补全，然后添加年度目标，年度目标中的pid就是实施目标中的id，实施目标没有父节点，
	 * @param defaultTargetList
	 */
	@RequestMapping(value="/createDefaultTarget.service",method=RequestMethod.POST)
	@ResponseBody
	public ResponseData createDefaultTarget(@RequestBody DefaultTargetData defaultTargetData){
		if(defaultTargetData==null){
			return new ResponseData(false,ExceptionConstant.DATA_NULL_CODE,ExceptionConstant.DATA_NULL_MESSAGE,null);
		}
		try{
			List<String> AnnualTargetNames=defaultTargetData.getDefaultTlist();//获取年度目标名字
			DefaultTargetEntity defaultTargetEntity=defaultTargetData.toEntity();
			String id=UUID.randomUUID().toString();
			defaultTargetEntity.setId(id);
			defaultTargetEntity.setTargetType(CommonConstant.DEFAULTTARGET_IMPL);//设置目标类型以备查询时使用
			defaultTargetService.createDefaultTargets(defaultTargetEntity);//添加实施期目标
			List<DefaultTargetEntity> AnnualTargets=new ArrayList<DefaultTargetEntity>();//存放年度目标
			for(int i=0;i<AnnualTargetNames.size();i++){//循环补全年度目标
				String name=AnnualTargetNames.get(i);
				DefaultTargetEntity AnnualTargetEntity=new DefaultTargetEntity();
				String Annualid=UUID.randomUUID().toString();
				AnnualTargetEntity.setId(Annualid);
				AnnualTargetEntity.setTargetName(name);
				AnnualTargetEntity.setTargetValue(defaultTargetEntity.getTargetValue());
				AnnualTargetEntity.setTargetType(CommonConstant.DEFAULTTARGET_YEAR);
				AnnualTargetEntity.setPid(id);
				AnnualTargetEntity.setReferenceValueOfTarget(defaultTargetEntity.getReferenceValueOfTarget());
				AnnualTargetEntity.setTargetAttribute(defaultTargetEntity.getTargetAttribute());
				AnnualTargetEntity.setTargetAttributeValue(defaultTargetEntity.getTargetAttributeValue());
				AnnualTargets.add(AnnualTargetEntity);
			}
			defaultTargetService.createListDefaultTarget(AnnualTargets);//批量添加年度目标
			
			return new ResponseData(true,CommonConstant.CREATE_SUCCESS);
	}
	catch(BusinessException e){
		return new ResponseData(false,e.getErrorCode(),e.getMessage(),null);
	}
	}
	/**
	 * 添加单个默认目标(仅用于添加单个实施期目标，不含年度目标)
	 * @return
	 */
	@RequestMapping(value="/createDefaultTargets.service",method=RequestMethod.POST)
	@ResponseBody
	public ResponseData createDefaultTargets(DefaultTargetDatas defaultTargetDatas){
		if(defaultTargetDatas==null){
			return new ResponseData(false,ExceptionConstant.DATA_NULL_CODE,ExceptionConstant.DATA_NULL_MESSAGE,null);
		}
		String id=UUID.randomUUID().toString();
		defaultTargetDatas.setId(id);
		DefaultTargetEntity defaultTargetEntity=new DefaultTargetEntity();
		defaultTargetEntity=defaultTargetDatas.toEntity();
		defaultTargetService.createDefaultTargets(defaultTargetEntity);
		return new ResponseData(true,defaultTargetDatas);
	}
	
	
	/**
	 * 根据默认目标编号删除默认目标
	 * @return
	 */
	@RequestMapping(value="/deleteDefaultTarget.service",method=RequestMethod.POST)
	@ResponseBody
	public ResponseData deleteDefaultTarget(String defaultTargetId){
		if(StringUtil.isBlank(defaultTargetId)){
			return new ResponseData(false,ExceptionConstant.ID_NULL_CODE);
		}
		defaultTargetService.deleteDefaultTarget(defaultTargetId);
		return new ResponseData(true,CommonConstant.DELETE_SUCCESS);
	}
	
	/**
	 * 根据默认目标编号更新默认目标
	 * @return
	 */
	@RequestMapping(value="/updateDafaultTargets.service",method=RequestMethod.POST)
	@ResponseBody
	public ResponseData updateDafaultTargets(DefaultTargetDatas defaultTargetDatas){
		if(defaultTargetDatas==null){
			return new ResponseData(false,ExceptionConstant.DATA_NULL_CODE,ExceptionConstant.DATA_NULL_MESSAGE,null);
		}
		DefaultTargetEntity defaultTargetEntity=new DefaultTargetEntity();
		defaultTargetEntity=defaultTargetDatas.toEntity();
		defaultTargetService.updateDafaultTargets(defaultTargetEntity);
		return new ResponseData(true,defaultTargetDatas);
	}
	
	/**
	 * 多条件查询全部默认目标
	 * @return
	 *//*
	@RequestMapping(value="/retrieveDefaultTarget.service",method=RequestMethod.POST)
	@ResponseBody
	public ResponseData retrieveDefaultTarget(DefaultTargetDatas defaultTargetDatas){
		if(defaultTargetDatas==null){
			return new ResponseData(false,ExceptionConstant.DATA_NULL_CODE,ExceptionConstant.DATA_NULL_MESSAGE,null);
		}
		DefaultTargetEntity defaultTargetEntity=new DefaultTargetEntity();
		defaultTargetEntity=defaultTargetDatas.toEntity();
		List<DefaultTargetEntity> defaultTargetEntitys=new ArrayList<DefaultTargetEntity>();
		defaultTargetEntitys=defaultTargetService.retrieveDefaultTarget(defaultTargetEntity);
		List<DefaultTargetDatas> defaultTargetDatass=new ArrayList<DefaultTargetDatas>();
		defaultTargetDatass=toDefaultTargetDatas(defaultTargetEntitys);
		return new ResponseData(true,defaultTargetDatass);
	}
	*/
	
	
	/**
	 * 查询全部
	 * @return 默认目标传输类集合
	 */
	@RequestMapping(value="/retrieveDefaultTargets.service",method=RequestMethod.POST)
	@ResponseBody
	public ResponseData retrieveDefaultTargets(){
		List<DefaultTargetEntity> defaulttargetList=new ArrayList<DefaultTargetEntity>();
		defaulttargetList=defaultTargetService.retrieveDefaultTarget();
		List<DefaultTargetDatas> defaulttargetDataList=new ArrayList<DefaultTargetDatas>();
		defaulttargetDataList=toDefaultTargetDatas(defaulttargetList);
		return new ResponseData(true,defaulttargetDataList);
	}
	
	/**
	 * 批量创建目标与省司的对应关系
	 * 目标与省司的关系是   一对多
	 * @param targetId
	 * @param orgIds
	 * @return
	 */
	@RequestMapping(value="/createDefaultTargetOrganizationRef.service",method=RequestMethod.POST)
	@ResponseBody
	public ResponseData createDefaultTargetOrganizationRef(String targetId,String[] orgIds){
		if(StringUtil.isBlank(targetId)||orgIds==null){
			return new ResponseData(false,ExceptionConstant.ID_NULL_CODE,ExceptionConstant.ID_NULL_MESSAGE,null);
		}
		try{
			TargetOrgRefEntity targetOrgRefEntity=new TargetOrgRefEntity();//用来接收切面的时间和创建者
			defaultTargetService.createDefaultTargetOrganizationRef(targetOrgRefEntity, targetId, orgIds);
			return new ResponseData(true,targetId);
		}catch(BusinessException e){
			return new ResponseData(false,e.getErrorCode(),e.getMessage(),null);
		}
	}
	
	/**
	 * 根据目标编号查询省司局
	 * @param tid
	 * @return 省司局集合
	 */
	@RequestMapping(value="/retrieveOrganizationByTid.service",method=RequestMethod.POST)
	@ResponseBody
	public ResponseData retrieveOrganizationByTid(String tid){
		if(StringUtil.isBlank(tid)){
			return new ResponseData(false,ExceptionConstant.ID_NULL_CODE,ExceptionConstant.ID_NULL_MESSAGE,null);
		}
		try{
			String identify="";
			List<OrganizationData> organizationDatas=defaultTargetService.retrieveOrganizationByTid(tid, identify);
			return new ResponseData(true,organizationDatas);
		}catch(BusinessException e){
			return new ResponseData(false,e.getErrorCode(),e.getMessage(),null);
		}
	}
	
	/**
	 * 实体类集合转化为传输类集合
	 * @param DefaultTargetEntitys
	 * @return
	 */
	private List<DefaultTargetDatas> toDefaultTargetDatas(List<DefaultTargetEntity> DefaultTargetEntitys) {
		int size = DefaultTargetEntitys.size();
		List<DefaultTargetDatas> defaultTargetDatas = new ArrayList<DefaultTargetDatas>();
		for (int i = 0; i < size; i++) { // 循环将实体数据转换为传输数据
			DefaultTargetDatas defaultTargetData = new DefaultTargetDatas();
			defaultTargetData.toDefaultTargetData(DefaultTargetEntitys.get(i));
			defaultTargetDatas.add(defaultTargetData);
		}
		return defaultTargetDatas;
	}
	
	/**
	 * 传输类集合转化为实体类集合
	 * @param DefaultTargetDatas
	 * @return
	 */
	private List<DefaultTargetEntity> toDefaultTargetEntity(List<DefaultTargetDatas> defaultTargetDatas) {
		int size = defaultTargetDatas.size();
		List<DefaultTargetEntity> defaultTargetEntitys = new ArrayList<DefaultTargetEntity>();
		for (int i = 0; i < size; i++) { // 循环将传输数据转换为实体数据
			DefaultTargetEntity defaultTargetEntity = new DefaultTargetEntity();
			defaultTargetEntity=defaultTargetDatas.get(i).toEntity();
			defaultTargetEntitys.add(defaultTargetEntity);
		}
		return defaultTargetEntitys;
	}
}
